package com.zxy.service;

import com.zxy.common.result.Result;
import com.zxy.pojo.dto.*;
import com.zxy.pojo.entity.CourseContract;
import com.zxy.pojo.vo.*;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;

public interface ReportService {

    //客户统计列表展示
    CourseContractResponseVO<CourseContract> contractStatisticsList(CustomerDTO dto);

    //客户统计数据表
    ReportVo contractStatistics(LocalDate beginCreateTime, LocalDate endCreateTime);

    //学科客户分布
    ReportSubjectDTO subjectStatistics(LocalDate beginCreateTime, LocalDate endCreateTime);

    //销售列表展示 归属部门
    CourseContractResponseVO<deptStatisticsListVo> deptStatisticsList( LocalDate pathStartDate, LocalDate pathEndDate,PageDTO dto);

    //销售列表展示 归属人
    CourseContractResponseVO<deptStatisticsListVo> ownerShipStatisticsList(LocalDate pathStartDate, LocalDate pathEndDate, PageDTO dto);

    //销售列表 归属渠道
    CourseContractResponseVO<deptStatisticsListVo> channelStatisticsList(LocalDate pathStartDate, LocalDate pathEndDate, PageDTO dto);

    //销售统计
    ReportVo salesStatistics(LocalDate beginCreateTime, LocalDate endCreateTime);

    //线索统计 分页展示
    CourseContractResponseVO<ClueDetailVo> cluesStatistics(CluesPageNumDTO dto);


    /**
     * 获取漏洞统计地图数据
     * @param beginDate 开始日期
     * @param endDate 结束日期
     * @return 统计数据
     */
    VulnerabilityMapResponseVO getVulnerabilityMap(LocalDate beginDate, LocalDate endDate);

    /**
     * 获取业务变更统计数据
     * @param beginCreateTime 开始日期
     * @param endCreateTime 结束日期
     * @return 业务变更统计列表
     */
    List<BusinessChangeStatsVo> businessChangeStatistics(LocalDate beginCreateTime, LocalDate endCreateTime);

    /**
     * 获取销售统计数据
     *
     * @param beginCreateTime 开始创建时间
     * @param endCreateTime   结束创建时间
     * @param deptId          部门ID
     * @return 销售统计列表
     */
    List<HashMap<String, Object>> salesStatistic(LocalDate beginCreateTime, LocalDate endCreateTime, Integer deptId);

    //线索统计 新增线索数量
    ReportVo cluesStatisticls(LocalDate beginCreateTime, LocalDate endCreateTime);

    //渠道统计 列表展示
    CourseContractResponseVO<ChannelVo> activityStatistics(ChannelPageDTO dto);

    //渠道数量
    List<ChaneCountlVo> chanelStatistics(LocalDate beginCreateTime, LocalDate endCreateTime);

    //活动数量
    List<ChaneActityVo> activityStatisticls(LocalDate beginCreateTime, LocalDate endCreateTime);
    
    /**
     * 统计待分配线索数
     */
    Integer countToAllocatedClues();
    
    /**
     * 统计待分配商机数
     */
    Integer countToAllocatedBusiness();
    
    /**
     * 统计指定日期范围内的线索总数
     */
    Integer countCluesByDateRange(LocalDate beginDate, LocalDate endDate);
    
    /**
     * 统计指定日期范围内的商机数
     */
    Integer countBusinessByDateRange(LocalDate beginDate, LocalDate endDate);
    
    /**
     * 统计指定日期范围内的合同数
     */
    Integer countContractByDateRange(LocalDate beginDate, LocalDate endDate);
    
    /**
     * 统计待跟进线索数
     */
    Integer countToFollowedClues();
    
    /**
     * 统计待跟进商机数
     */
    Integer countToFollowedBusiness();
    
    /**
     * 获取首页统计数据
     * @param beginCreateTime 开始日期
     * @param endCreateTime 结束日期
     * @param deptId 部门ID
     * @return 首页统计数据VO对象
     */
    IndexStatisticsVO getIndexStatistics(LocalDate beginCreateTime, LocalDate endCreateTime, Integer deptId);
}